package com.easystudy.media.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.easystudy.media.call.Callback;
import com.easystudy.media.error.ErrorCode;
import com.easystudy.media.error.ReturnValue;
import com.easystudy.media.model.DeviceInfo;
import com.easystudy.media.model.DeviceStatus;
import com.easystudy.media.model.HeartInfo;
import com.easystudy.media.model.RecordInfo;
import com.easystudy.media.model.StrategyInfo;
import com.easystudy.media.service.MediaService;

/**
 * @文件名称: MediaController.java
 * @功能描述: 媒体接入接口
 * @版权信息: www.easystudy.com
 * @技术交流: 961179337(QQ群)
 * @编写作者: lixx2048@163.com
 * @联系方式: 941415509(QQ)
 * @开发日期: 2021年6月11日
 * @历史版本: V1.0 
 * @备注信息:
 */
@RestController
@RequestMapping("/media")
public class MediaController {
	@Autowired
	private MediaService mediaService;
	
	/**
	 * @功能描述: 媒体服务器心跳
	 * @版权信息: www.easystudy.com
	 * @编写作者: lixx2048@163.com
	 * @开发日期: 2023年11月14日
	 * @备注信息: TODO
	 */
	@PostMapping("/heart")
	public ReturnValue<String> heart(@RequestParam("id")String id, @RequestBody HeartInfo heartInfo) {
		Callback callback = mediaService.getCallback();
		if (callback != null) {
			return callback.onHeart(id, heartInfo);
		}
		return new ReturnValue<String>(ErrorCode.ERROR_NOT_AVAILABLE);
	}
	
	/**
	 * @功能描述: 获取接入设备列表
	 * @版权信息: www.easystudy.com
	 * @编写作者: lixx2048@163.com
	 * @开发日期: 2023年11月14日
	 * @备注信息: TODO
	 */
	@GetMapping("/device/access")
	public ReturnValue<List<DeviceInfo>> devices(@RequestParam("id")String id,
												 @RequestParam("pageIndex")Long pageIndex,
												 @RequestParam("pageSize")Long pageSize) {
		Callback callback = mediaService.getCallback();
		if (callback != null) {
			return callback.onGetDevice(id, pageIndex, pageSize);
		}
		return new ReturnValue<List<DeviceInfo>>(ErrorCode.ERROR_NOT_AVAILABLE);
	}
	
	/**
	 * @功能描述: 获取接入设备录像策略
	 * @版权信息: www.easystudy.com
	 * @编写作者: lixx2048@163.com
	 * @开发日期: 2023年11月14日
	 * @备注信息: TODO
	 */
	@GetMapping("/device/strategy")
	public ReturnValue<StrategyInfo> strategy(@RequestParam("id")String id,
											  @RequestParam("deviceId")String deviceId) {
		Callback callback = mediaService.getCallback();
		if (callback != null) {
			return callback.onGetStrategy(id, deviceId);
		}
		return new ReturnValue<StrategyInfo>(ErrorCode.ERROR_NOT_AVAILABLE);
	}
	
	/**
	 * @功能描述: 上报设备状态
	 * @版权信息: www.easystudy.com
	 * @编写作者: lixx2048@163.com
	 * @开发日期: 2023年11月14日
	 * @备注信息: TODO
	 */
	@PutMapping("/device/status")
	public ReturnValue<String> status(@RequestParam("id")String id,
									  @RequestBody List<DeviceStatus> status) {
		Callback callback = mediaService.getCallback();
		if (callback != null) {
			return callback.onDeviceStatus(id, status);
		}
		return new ReturnValue<String>(ErrorCode.ERROR_NOT_AVAILABLE);
	}
	
	/**
	 * @功能描述: 更新设备图片
	 * @版权信息: www.easystudy.com
	 * @编写作者: lixx2048@163.com
	 * @开发日期: 2023年11月14日
	 * @备注信息: TODO
	 */
	@PutMapping("/device/image")
	public ReturnValue<String> updateImage(@RequestParam("id")String id, 
										   @RequestParam("deviceId")String deviceId,
										   @RequestParam("imageUrl")String imageUrl) {
		Callback callback = mediaService.getCallback();
		if (callback != null) {
			return callback.onDeviceImage(id, deviceId, imageUrl);
		}
		return new ReturnValue<String>(ErrorCode.ERROR_NOT_AVAILABLE);
	}
	
	/**
	 * @功能描述: 上传设备录像
	 * @版权信息: www.easystudy.com
	 * @编写作者: lixx2048@163.com
	 * @开发日期: 2023年11月14日
	 * @备注信息: TODO
	 */
	@PostMapping("/device/record")
	public ReturnValue<String> uploadRecord(@RequestParam("id")String id,
									  		@RequestBody RecordInfo record) {
		Callback callback = mediaService.getCallback();
		if (callback != null) {
			return callback.onDeviceRecord(id, record);
		}
		return new ReturnValue<String>(ErrorCode.ERROR_NOT_AVAILABLE);
	}
	
	/**
	 * @功能描述: 删除设备定时录像
	 * @版权信息: www.easystudy.com
	 * @编写作者: lixx2048@163.com
	 * @开发日期: 2023年11月14日
	 * @备注信息: TODO
	 */
	@DeleteMapping("/device/record")
	public ReturnValue<String> deleteRecord(@RequestParam("id")String id,
			@RequestBody RecordInfo record) {
		Callback callback = mediaService.getCallback();
		if (callback != null) {
			return callback.onDeleteRecord(id, record);
		}
		return new ReturnValue<String>(ErrorCode.ERROR_NOT_AVAILABLE);
	}
}
